package cn.tedu;

import java.sql.*;
import java.util.Scanner;

public class Demo02 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入用户名");
        String username = sc.nextLine();
        System.out.println("输入密码");
        String password = sc.nextLine();
        //获取链接
        try (
                Connection conn = DBUtils.getConn();
        ) {
//            Statement s = conn.createStatement();
//            //执行查询 查询符合条件的数量 大于0 代表登录成功
//            String sql = "select count(*) from user where username='" +
//                    username + "' and password='" + password + "'";
//            System.out.println(sql);
//            ResultSet rs = s.executeQuery(sql);

            //解决SQL注入的问题 PreparedStatement带有预编译效果的执行SQL语句的对象
            String sql = "select count(*) from user where username=? and password=?";
            //预编译的对象在创建时将SQL语句进行编译此时用户输入的内容还不在其中
            //编译完之后相当于把SQL语句的逻辑部分锁死，用户输入的内容只能以值的形式添加到SQL语句中，这样就能避免原来的SQL语句中的逻辑被修改.
            PreparedStatement ps = conn.prepareStatement(sql);
            //替换掉SQL语句中的？  1和2代表的是？的位置
            ps.setString(1, username);
            ps.setString(2, password);
            //执行查询SQL语句    执行查询时不再使用SQL语句
            ResultSet rs = ps.executeQuery();

            rs.next(); //next()在此的作用是游标往下移动，不管登录是否成功，都需要游标移动
            int count = rs.getInt(1);
            if (count > 0) {
                System.out.println("登陆成功");
            } else {
                System.out.println("登陆失败，用户名或密码错误");
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }
}
